home *** CD-ROM | disk | FTP | other *** search
/ boe.pres.k12.wv.us / boe.pres.k12.wv.us.zip / boe.pres.k12.wv.us / Utilities / Xerox Workcentre 5335 / Windows Scan / 32-bit_x86 / Francais / cpsimage.cab / data / docio / docioNodeClass.elf < prev    next >
Text File  |  2009-03-16  |  20KB  |  575 lines

  1. /*
  2. ** $Id: docioNodeClass.elf,v 1.43 2009/02/10 12:21:52 campanel Exp $
  3. **
  4. ** This script file provides a Processing Node representation for automatic format conversions
  5. */
  6. #import "documentio.ucm";
  7.  
  8. /******************************************************************************/
  9. CLASS TRANSFORMNODE {
  10.     METHOD turnOn (BOOLEAN value)
  11.     {
  12.         this.doTurnOn = value;
  13.     }
  14.     METHOD isTurnOn () RETURNS (BOOLEAN value)
  15.     {
  16.         value = this.doTurnOn;
  17.     }
  18.     METHOD setXipmeth(STRING value)
  19.     {
  20.         this.xipmeth = value;
  21.     }
  22.     METHOD getXipmeth () RETURNS (STRING value)
  23.     {
  24.         value = this.xipmeth;
  25.     }
  26.     METHOD getOp (STRING inImgName, STRING outImgName) RETURNS (STRING value)
  27.     {
  28.         INTEGER cntOps, cntPars, ii, ij;
  29.         STRING rs = " ";
  30.         STRING workOp, parNm, parVl;
  31.         LIST parameters;
  32.  
  33.         if (this.doTurnOn == 0)
  34.         {
  35.             value = rs;
  36.             return;
  37.         }
  38.         if (this.preOps.length() > 1)
  39.         {
  40.             rs = rs+this.preOps;
  41.         }
  42.         if (this.operations)
  43.         {
  44.             cntOps = this.operations.length();
  45.             if ((cntOps > 0) && (rs.length() > 1))
  46.                 rs = rs + outImgName + " = " + inImgName;
  47.             else
  48.                 rs = outImgName + " = " + inImgName;
  49.  
  50.             for(ij=0; ij<cntOps; ij=ij+2)
  51.             {
  52.                 workOp = this.operations.ref(entry:ij);
  53.                 parameters = this.operations.ref(entry:ij+1);
  54.                 rs = rs + "." + workOp + "(";
  55.                 if (parameters)
  56.                 {
  57.                     cntPars= parameters.length();
  58.                     for(ii=0; ii<cntPars; ii=ii+2)
  59.                     {
  60.                         if (ii>0)
  61.                             rs = rs + ", ";
  62.                         parNm = parameters.ref(entry:ii);
  63.                         parVl = parameters.ref(entry:ii+1);
  64.                         rs = rs + parNm + ":" + parVl;
  65.                     }
  66.                 }
  67.                 rs = rs + ")";
  68.             }
  69.             rs = rs + ";\n";
  70.         }
  71.         if (this.postOps.length() > 1)
  72.         {
  73.             rs = rs+this.postOps;
  74.         }
  75.         value = rs;
  76.     }
  77.  
  78.  
  79.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  80.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  81.     {
  82.         /* Any class that EXTENDS the TRANSFORMNODE should overload this method.
  83.         ** This method has three responsibilites:
  84.         **  1) Determine if this node is needed given the in and out spec
  85.         **  2) prepare this.preOps, this.postOps, and this.operations to output
  86.         **     appropriate script string when TRANSFORMNODE.getOp is called
  87.         **  3) Prepare and return modSpec, which indicates the results applying this node.
  88.         **
  89.         ** This implementation is a no-op.
  90.         */
  91.  
  92.  
  93.         if (pullmode)
  94.             this.nextSpec = outSpec;
  95.         else
  96.             outSpec = this.nextSpec;
  97.  
  98.         this.doTurnOn = FALSE;
  99.  
  100.         isOn = FALSE;
  101.         if (pullmode == 1)
  102.             modSpec = outSpec;
  103.         else
  104.             modSpec = inSpec;
  105.     }
  106.     
  107.     /* Internal Fields */
  108.     STRING xipmeth;
  109.     STRING preOps = " ";
  110.     STRING postOps = " ";
  111.     BOOLEAN doTurnOn = FALSE;
  112.     LIST operations;
  113.     TRANSFORMSPEC nextSpec;
  114.  
  115. }     /* END CLASS TRANSFORMNODE */
  116.  
  117. /********************************************************************************
  118. *************  A Set of Child Nodes For each Operation **************************
  119. ********************************************************************************/
  120.  
  121.       /* Any class that EXTENDS the TRANSFORMNODE should overload testNeed.
  122.       ** The method has three responsibilites:
  123.       **  1) Determine if this node is needed given the in and out spec
  124.       **  2) prepare this.preOps, this.postOps, and this.operations to output
  125.       **     appropriate script string when TRANSFORMNODE.getOp is called
  126.       **  3) Prepare and return modSpec, which indicates the results applying this node.
  127.       **
  128.       */
  129.  
  130. CLASS NODEUNCOMPRESS EXTENDS TRANSFORMNODE
  131. {
  132.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  133.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  134.     {
  135.         LIST cinfo;
  136.         INTEGER lind = -1;
  137.  
  138.         if (pullmode)
  139.             this.nextSpec = outSpec;
  140.         else
  141.             outSpec = this.nextSpec;
  142.  
  143.         outSpec.testCompress(inSpec:inSpec, pulling:pullmode, decode:1)
  144.                       Returns (needed:isOn, result:modSpec, cinfo:cinfo);
  145.         this.doTurnOn = isOn;
  146.         if ((isOn == TRUE) && (!pullmode))
  147.         {
  148.             this.operations.insert(entry:10000, obj:"unCompress");
  149.         }
  150.     }     /* END testNeed METHOD */
  151. }     /* END uncompressnode CLASS */
  152.  
  153.  
  154.  
  155. CLASS NODEFLATTEN EXTENDS TRANSFORMNODE
  156. {
  157.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  158.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  159.     {
  160.         if (pullmode)
  161.             this.nextSpec = outSpec;
  162.         else
  163.             outSpec = this.nextSpec;
  164.  
  165.         outSpec.testFlat(inSpec:inSpec, pulling:pullmode)
  166.                 Returns (needed:isOn, result:modSpec);
  167.  
  168.         this.doTurnOn = isOn;
  169.         if ((isOn == TRUE) && (!pullmode))
  170.         {
  171.             this.postOps = "destIm = Flatten(imgIn:destIm);\n";
  172.         }
  173.     }
  174. }
  175.  
  176.  
  177.  
  178. CLASS NODEAFFINE EXTENDS TRANSFORMNODE
  179. {
  180.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  181.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  182.     {
  183.         if (pullmode)
  184.             this.nextSpec = outSpec;
  185.         else
  186.             outSpec = this.nextSpec;
  187.  
  188.         outSpec.testAffine(inSpec:inSpec, pulling:pullmode)
  189.                 Returns (needed:isOn, result:modSpec);
  190.  
  191.         this.doTurnOn = isOn;
  192.         if ((isOn == TRUE) && (!pullmode))
  193.         {
  194.             this.postOps = "destIm = Affine(imgIn:destIm);\n";
  195.         }
  196.     }
  197. }
  198.  
  199.  
  200.  
  201. CLASS NODERESIZE EXTENDS TRANSFORMNODE
  202.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  203.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  204.     {
  205.         INTEGER xs, ys;
  206.         DOUBLE xr, yr, factor;
  207.  
  208.         if (pullmode)
  209.             this.nextSpec = outSpec;
  210.         else
  211.             outSpec = this.nextSpec;
  212.  
  213.         outSpec.testSize(inSpec:inSpec, pulling:pullmode)
  214.                 Returns (needed:isOn, result:modSpec, xsize:xs, ysize:ys, xres:xr, yres:yr, sfact: factor);
  215.  
  216.         this.doTurnOn = isOn;
  217.  
  218.       if ( xs < 0 && ys < 0) return; 
  219.  
  220.         if ((isOn == TRUE) && (!pullmode))
  221.         {
  222.             STRING wstr = "("+xs+","+ys+")";
  223.             /* This is a scale operation; sometimes the application is looking for a 
  224.             ** thumbnail. This code will add a thumbanil rather than scale if the scale
  225.             ** factor is small */
  226.             if (factor < 0.25 && factor > 0)
  227.             {
  228.                 /* use thumbnail engine */
  229.                 this.operations.insert(entry:10000, obj:"thumbnail");
  230.                 this.operations.insert(entry:10000, obj:("size", wstr) );
  231.             }
  232.             else if ( xs && ys )
  233.             {
  234.                 /* use scale engine */
  235.                 this.operations.insert(entry:10000, obj:"scale");
  236.                 this.operations.insert(entry:10000, obj:("window", wstr) );
  237.             }
  238.        
  239.  
  240.         // Now add modify the resolution found on the image
  241.  
  242.         // Check to see if the image is less than 512x512, if so drop the res down to 50 
  243.         if ( xs < 512 && ys < 512)  
  244.         {
  245.                 this.postOps = "destIm.imageWidth = " + xs +
  246.                        ";\ndestIm.imageHeight = " + ys +
  247.                        ";\ndestIm.resolution = (50, 50)" +
  248.                        ";\ndestIm.setMember(member: \"xres\", value:" + 50 +
  249.                        ");\ndestIm.setMember(member: \"yres\", value:" + 50 +
  250.                        ");\ndestIm.setMember(member: \"width\", value:" + xs +
  251.                        ");\ndestIm.setMember(member: \"height\", value:" + ys + ");\n";
  252.  
  253.             }
  254.         else 
  255.             {
  256.                 this.postOps = "destIm.imageWidth = " + xs +
  257.                        ";\ndestIm.imageHeight = " + ys +
  258.                        ";\ndestIm.resolution = (" + xr + ", " + yr +
  259.                        ");\ndestIm.setMember(member: \"xres\", value:" + xr +
  260.                        ");\ndestIm.setMember(member: \"yres\", value:" + yr +
  261.                        ");\ndestIm.setMember(member: \"width\", value:" + xs +
  262.                        ");\ndestIm.setMember(member: \"height\", value:" + ys + ");\n";
  263.             }
  264.     
  265.         }
  266.     }
  267. }
  268.  
  269.  
  270.  
  271. CLASS NODEBITREDUCE EXTENDS TRANSFORMNODE
  272. {
  273.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  274.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  275.     {
  276.         LIST cinfo;
  277.         INTEGER lind = -1;
  278.         INTEGER tobits;
  279.         
  280.         if (pullmode)
  281.             this.nextSpec = outSpec;
  282.         else
  283.             outSpec = this.nextSpec;
  284.  
  285.         outSpec.testDepth(inSpec:inSpec, pulling:pullmode, reduce:1)
  286.                  Returns (needed:isOn, result:modSpec, tobits:tobits);
  287.  
  288.         this.doTurnOn = isOn;
  289.         if ((isOn == TRUE) && (!pullmode))
  290.         {
  291.            /* this was used to un-map, but using autoformat does not require unmap */
  292.             STRING cop;
  293.             if (inSpec.testPhotom( photometry: XIP_BUILDMAP_COLOR ) == TRUE)
  294.                 cop = "unmap().convert";
  295.             else
  296.                 cop = "convert";
  297.  
  298.             if (tobits == 1)
  299.             {
  300.                 STRING deviceColorTest = "\
  301. if ( destIm.getMember (member: \"photometry\") == XIP_DEVICERGB_COLOR ) \
  302.   destIm = destIm.modheader (modify: (\"Photometry:name:srgb\")); \
  303. else if ( destIm.getMember (member: \"photometry\") == XIP_DEVICEGRAY_COLOR ) \
  304.   destIm = destIm.modheader (modify: (\"Photometry:name:gray\"));\n\n";
  305.  
  306.                 this.preOps = deviceColorTest;
  307.                 this.operations.insert(entry:10000, obj:"autoformat");
  308.                 this.operations.insert(entry:10000, obj:("formats", "\"mask(0) photometry(gray)\"") );
  309.                 this.operations.insert(entry:10000, obj:"floyd");
  310.                 this.operations.insert(entry:10000, obj:("levels", "(2)") );
  311.                 this.operations.insert(entry:10000, obj:"convert");
  312.                 this.operations.insert(entry:10000, obj:("to", "(1)") );
  313.                 this.postOps = "\
  314. destIm.setMember( member: \"layerType\", value: XIP_Binary);\n \
  315. destIm = destIm.cspace(outspace: \"klinear\" );\n\n";
  316.             }
  317.             else
  318.             {
  319.                 this.operations.insert(entry:10000, obj:cop);
  320.                 this.operations.insert(entry:10000, obj:("to", "("+tobits+")") );
  321.             }
  322.         }
  323.     }     /* END testneed METHOD */
  324. }
  325.  
  326.  
  327.  
  328. CLASS NODEROTATE EXTENDS TRANSFORMNODE
  329. {
  330.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  331.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  332.     {
  333.         BOOLEAN useJPRotate = FALSE;
  334.         INTEGER degrees = 0;
  335.  
  336.         if (pullmode)
  337.             this.nextSpec = outSpec;
  338.         else
  339.             outSpec = this.nextSpec;
  340.     
  341.         outSpec.testOrient(inSpec:inSpec, pulling:pullmode)
  342.                   Returns (needed:isOn, result:modSpec, amount:degrees, jpRot:useJPRotate);
  343.         this.doTurnOn = isOn;
  344.         
  345.         if ((isOn == TRUE) && (!pullmode)) {
  346.  
  347.               this.postOps = \
  348.                   "INTEGER tmpi = destIm.imageWidth;\ndestIm.imageWidth = destIm.imageHeight;\ndestIm.imageHeight = tmpi;\ndestIm.clearAttr(name: \"_PDFrotate\");\n";
  349.         
  350.             if(useJPRotate){
  351.                 this.operations.insert(entry:10000, obj:"jprotate");
  352.                 this.operations.insert(entry:10000, obj:("rotate", degrees) );
  353.             }else{
  354.                 this.operations.insert(entry:10000, obj:"interleave");
  355.                 this.operations.insert(entry:10000, obj:("scanline", 1) );
  356.                 this.operations.insert(entry:10000, obj:"rotate");
  357.                 this.operations.insert(entry:10000, obj:("iangle", degrees) ); 
  358.             }
  359.         }
  360.     }
  361. }
  362.  
  363.  
  364.  
  365. CLASS NODEBITEXPAND EXTENDS TRANSFORMNODE
  366. {
  367.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  368.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  369.     {
  370.         LIST cinfo;
  371.         INTEGER lind = -1;
  372.         INTEGER tobits;
  373.         
  374.         if (pullmode)
  375.             this.nextSpec = outSpec;
  376.         else
  377.             outSpec = this.nextSpec;
  378.             
  379.         outSpec.testDepth(inSpec:inSpec, pulling:pullmode, reduce:0)
  380.                       Returns (needed:isOn, result:modSpec, tobits:tobits);
  381.         this.doTurnOn = isOn;
  382.         if ((isOn == TRUE) && (!pullmode))
  383.         {
  384.             if (inSpec.testPhotom( photometry: XIP_K_COLOR ) == TRUE) {
  385.                 if (tobits == 8) {
  386.                     /* K Color is not supported in convert 1 to 8 */
  387.                     STRING strWithQuote = "cspace(outspace: \"gray\" ).convert";
  388.                     this.operations.insert(entry:10000, obj: strWithQuote);
  389.                     this.operations.insert(entry:10000, obj:("to", "("+tobits+")") );
  390.                 } else {
  391.                     this.operations.insert(entry:10000, obj:"convert");
  392.                     this.operations.insert(entry:10000, obj:("to", "("+tobits+")") );
  393.                 }
  394.             } else {
  395.                 this.operations.insert(entry:10000, obj:"convert");
  396.                 this.operations.insert(entry:10000, obj:("to", "("+tobits+")") );
  397.             }
  398.         }
  399.     }
  400. }
  401.  
  402.  
  403. CLASS NODESEGMENT EXTENDS TRANSFORMNODE
  404. {
  405.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  406.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  407.     {
  408.         STRING cfFile;
  409.  
  410.         if (pullmode)
  411.             this.nextSpec = outSpec;
  412.         else
  413.             outSpec = this.nextSpec;
  414.  
  415.         outSpec.testSegment(inSpec:inSpec, pulling:pullmode)
  416.                    Returns (needed:isOn, result:modSpec, config:cfFile);
  417.         this.doTurnOn = isOn;
  418.  
  419.         if ((isOn == TRUE) && (!pullmode))
  420.         {
  421.             this.operations.insert(entry:10000, obj:"fijiSeg");
  422.             this.operations.insert(entry:10000, obj:("cfgfile", cfFile) );
  423.             this.preOps = "#import \"fiji2xip.ucm\";\n";
  424.         }
  425.     }
  426. }
  427.  
  428.  
  429.  
  430. CLASS NODECOMPRESS EXTENDS TRANSFORMNODE
  431. {
  432.     METHOD testNeed (TRANSFORMSPEC inSpec,  TRANSFORMSPEC outSpec, BOOLEAN pullmode)
  433.             RETURNS (BOOLEAN isOn, TRANSFORMSPEC modSpec)
  434.     {
  435.         LIST cinfo;
  436.         INTEGER lind = -1;
  437.         TRANSFORMSPEC updateS;
  438.         BOOLEAN doBin = 0;
  439.         BOOLEAN doCont = 0;
  440.         STRING contmeth, binmeth;
  441.  
  442.         if (pullmode)
  443.             this.nextSpec = outSpec;
  444.         else
  445.             outSpec = this.nextSpec;
  446.  
  447.         outSpec.testCompress(inSpec:inSpec, pulling:pullmode, decode:0)
  448.                     Returns (needed:isOn, result:modSpec, cinfo:cinfo);
  449.         this.doTurnOn = isOn;
  450.  
  451.         if ((isOn == TRUE) && (!pullmode))
  452.         {
  453.             LIST cparams;
  454.             lind = cinfo.search(name:"binena");
  455.             if (lind != -1)
  456.             {
  457.                 doBin = cinfo.ref(entry:lind);
  458.                 if (doBin == 1)
  459.                 {
  460.                     binmeth = cinfo.ref(name:"binalgo");
  461.                     cparams.insert(entry:10000, obj:"binarytype");
  462.                     cparams.insert(entry:10000, obj:binmeth);
  463.                     if ( binmeth.strcasecmp(str: "\"g4\"") == TRUE ||
  464.                          binmeth.strcasecmp(str: "\"g3\"") == TRUE  ||
  465.                          binmeth.strcasecmp(str: "\"g32d\"") == TRUE  )
  466.                     {
  467.                         if (inSpec.testPhotom( photometry: XIP_K_COLOR ) == FALSE) {
  468.                             this.preOps = "destIm = destIm.cspace(outspace: \"klinear\" );\n";
  469.                         }
  470.                     }
  471.                     if (binmeth.strcasecmp(str: "\"deflate\"") == TRUE) {
  472.                             this.preOps = "destIm = destIm.interleave(pixel: TRUE );\n";
  473.                     }
  474.                 }
  475.             }
  476.             lind = cinfo.search(name:"contena");
  477.             if (lind != -1)
  478.             {
  479.                 doCont = cinfo.ref(entry:lind);
  480.                 if (doCont == 1)
  481.                 {
  482.                     contmeth = cinfo.ref(name:"contalgo");
  483.                     cparams.insert(entry:10000, obj:"contonetype");
  484.                     cparams.insert(entry:10000, obj:contmeth);
  485.                 }
  486.             }
  487.             this.operations.insert(entry:10000, obj:"compress");
  488.             this.operations.insert(entry:10000, obj:cparams);
  489.         }     // end if value TRUE
  490.     }
  491. }
  492.  
  493. /*************************************************************************
  494. ***************    Use this procedure to create a node  ******************
  495. *************************************************************************/
  496. PROCEDURE  TransformNode_Factory (STRING nodeType)
  497.              RETURNS (TRANSFORMNODE tfn)
  498. {
  499.     
  500.     if (nodeType == "uncompress")
  501.         tfn = new(NODEUNCOMPRESS);
  502.     else if (nodeType == "dioflatten")
  503.         tfn = new(NODEFLATTEN);
  504.     else if (nodeType == "size")
  505.         tfn = new(NODERESIZE);
  506.     else if (nodeType == "bitreduce")
  507.         tfn = new(NODEBITREDUCE);
  508.     else if (nodeType == "rotate")
  509.         tfn = new(NODEROTATE);
  510.     else if (nodeType == "bitexpand")
  511.         tfn = new(NODEBITEXPAND);
  512.     else if (nodeType == "dioSegment")
  513.         tfn = new(NODESEGMENT);
  514.     else if (nodeType == "compress")
  515.         tfn = new(NODECOMPRESS);
  516.     else if (nodeType == "affine")
  517.         tfn = new(NODEAFFINE);
  518.     else
  519.         tfn = new(TRANSFORMNODE);
  520.  
  521.     /* This code calls the setXipmeth method which makes certian that
  522.     ** the objects are fully instanciated (allows caller to "test" it). */
  523.     tfn.setXipmeth(value: nodeType);
  524. }
  525.  
  526. /*************************************************************************
  527. *************    Use this procedure to create a node list ****************
  528. *************************************************************************/
  529. /* @InitialNodeList
  530.   // DESCRIPTION
  531.   This procedure will create a LIST of TRANSFORMNODE objects. The nodes are
  532.   used to compare a source and destination TRANSFORMSPEC. Each node will
  533.   determine if the operation defined by that node is needed. 
  534.   
  535.   // ARGUMENTS
  536.   none
  537.   
  538.   // RETURNS
  539.   LIST nodes - A LIST of TRANSFORNODE objects. These objects represent
  540.                a processing pipeline
  541. */
  542. PROCEDURE InitialNodeList ()
  543.            RETURNS (LIST nodes)
  544. {
  545.     TRANSFORMNODE tfn;
  546.  
  547.     tfn = TransformNode_Factory(nodeType: "uncompress");
  548.     nodes.insert(obj:tfn, entry:10000);
  549.  
  550.     tfn = TransformNode_Factory(nodeType: "dioflatten");
  551.     nodes.insert(obj:tfn, entry:10000);
  552.  
  553.     tfn = TransformNode_Factory(nodeType: "affine");
  554.     nodes.insert(obj:tfn, entry:10000);
  555.  
  556.     tfn = TransformNode_Factory(nodeType: "size");
  557.     nodes.insert(obj:tfn, entry:10000);
  558.  
  559.     tfn = TransformNode_Factory(nodeType: "bitreduce");
  560.     nodes.insert(obj:tfn, entry:10000);
  561.  
  562.     tfn = TransformNode_Factory(nodeType: "rotate");
  563.     nodes.insert(obj:tfn, entry:10000);
  564.  
  565.     tfn = TransformNode_Factory(nodeType: "bitexpand");
  566.     nodes.insert(obj:tfn, entry:10000);
  567.  
  568.     tfn = TransformNode_Factory(nodeType: "dioSegment");
  569.     nodes.insert(obj:tfn, entry:10000);
  570.  
  571.     tfn = TransformNode_Factory(nodeType: "compress");
  572.     nodes.insert(obj:tfn, entry:10000);
  573. }
  574.